// Multi-Agent 系统的工具定义
import { Tool } from "@langchain/core/tools";
import { z } from "zod";

/**
 * 搜索工具 - 研究员使用
 */
export class SearchTool extends Tool {
  name = "search";
  description = "搜索网络信息，输入搜索关键词。适用于需要查找事实、数据或背景信息的场景。";
  schema = z.object({ 
    query: z.string().describe("搜索关键词") 
  });

  async _call(input: { query: string }) {
    // 模拟搜索结果
    const mockResults: Record<string, string> = {
      "人工智能": "人工智能（AI）是计算机科学的一个分支，致力于创建能够执行通常需要人类智能的任务的系统。",
      "机器学习": "机器学习是人工智能的一个子领域，专注于开发能够从数据中学习并改进的算法。",
      "深度学习": "深度学习是机器学习的一个分支，使用多层神经网络来处理复杂的数据模式。",
      "默认": `关于"${input.query}"的搜索结果：这是一个重要的主题，涉及多个方面的知识和应用。`
    };

    return mockResults[input.query] || mockResults["默认"];
  }
}

/**
 * 计算工具 - 分析师使用
 */
export class CalculatorTool extends Tool {
  name = "calculator";
  description = "执行数学计算，支持加减乘除和基本函数。输入数学表达式，如 '10+20*3'。";
  schema = z.object({ 
    expression: z.string().describe("数学表达式，如 2+3*4") 
  });

  async _call(input: { expression: string }) {
    try {
      const cleanedExpr = input.expression.replace(/\s+/g, "");
      const allowed = /^[0-9+\-*/().]+$/;
      
      if (!allowed.test(cleanedExpr)) {
        return `计算错误：表达式包含非法字符`;
      }
      
      const result = Function(`"use strict"; return (${cleanedExpr})`)();
      return `计算结果：${result}`;
    } catch (error) {
      return `计算错误：${error}`;
    }
  }
}

/**
 * 时间工具 - 所有角色可用
 */
export class TimeTool extends Tool {
  name = "get_time";
  description = "获取当前时间";
  schema = z.object({});

  async _call() {
    const now = new Date();
    return `当前时间：${now.toLocaleString('zh-CN', { 
      year: 'numeric', 
      month: '2-digit', 
      day: '2-digit', 
      hour: '2-digit', 
      minute: '2-digit', 
      second: '2-digit' 
    })}`;
  }
}

/**
 * 数据分析工具 - 分析师使用
 */
export class DataAnalysisTool extends Tool {
  name = "analyze_data";
  description = "分析数据并提供统计摘要。输入数据描述或数据集。";
  schema = z.object({ 
    data: z.string().describe("需要分析的数据或数据描述") 
  });

  async _call(input: { data: string }) {
    // 模拟数据分析
    return `数据分析结果：
- 数据样本：${input.data}
- 基本统计：数据呈现正态分布
- 关键洞察：数据质量良好，可用于进一步分析
- 建议：可以进行更深入的相关性分析`;
  }
}

